#!/bin/bash

# =============================================================================
# 可靠的PKG构建脚本
# 解决PKG安装失败的根本问题
# =============================================================================

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'

# 配置
APP_NAME="LimeReader.app"
CHINESE_APP_NAME="影谷长图处理大师.app"
VERSION="2.7.2"
PKG_NAME="LimeReader_v${VERSION}_macOS.pkg"
DIST_DIR="dist"

echo -e "${CYAN}🏗️  可靠PKG构建系统${NC}"
echo -e "${CYAN}解决PKG安装失败的根本问题${NC}"
echo

# 检查应用
echo -e "${YELLOW}🔍 检查应用状态...${NC}"
if [ ! -d "build/bin/$APP_NAME" ]; then
    echo -e "${RED}❌ 未找到应用: build/bin/$APP_NAME${NC}"
    exit 1
fi

if [ ! -f "build/bin/$APP_NAME/Contents/MacOS/LimeReader" ]; then
    echo -e "${RED}❌ 应用可执行文件不存在${NC}"
    exit 1
fi

echo -e "${GREEN}✅ 应用检查通过${NC}"

# 创建输出目录
mkdir -p "$DIST_DIR"

# 清理临时目录
echo -e "${YELLOW}🧹 准备构建环境...${NC}"
rm -rf pkg_build
mkdir -p pkg_build/root/Applications
mkdir -p pkg_build/scripts

# 复制应用并预设正确权限
echo -e "${YELLOW}📦 复制应用...${NC}"
cp -R "build/bin/$APP_NAME" "pkg_build/root/Applications/$CHINESE_APP_NAME"

# 立即修复权限（在PKG构建前）
echo -e "${YELLOW}🔧 预修复应用权限...${NC}"
chmod +x "pkg_build/root/Applications/$CHINESE_APP_NAME/Contents/MacOS/LimeReader"
chmod -R 755 "pkg_build/root/Applications/$CHINESE_APP_NAME"
chown -R $(id -u):$(id -g) "pkg_build/root/Applications/$CHINESE_APP_NAME"

# 设置中文名称
echo -e "${YELLOW}🏷️  设置应用名称...${NC}"
/usr/libexec/PlistBuddy -c "Set :CFBundleDisplayName 影谷长图处理大师" "pkg_build/root/Applications/$CHINESE_APP_NAME/Contents/Info.plist" 2>/dev/null || true
/usr/libexec/PlistBuddy -c "Set :CFBundleName 影谷长图处理大师" "pkg_build/root/Applications/$CHINESE_APP_NAME/Contents/Info.plist" 2>/dev/null || true

# 预先签名（避免权限问题）
codesign -f -s - "pkg_build/root/Applications/$CHINESE_APP_NAME" 2>/dev/null || true

# 清理多余文件
echo -e "${YELLOW}🧹 清理多余文件...${NC}"
rm -f "pkg_build/root/Applications/$CHINESE_APP_NAME/Contents/MacOS/config.json"
rm -f "pkg_build/root/Applications/$CHINESE_APP_NAME/Contents/MacOS/debug.log"
rm -rf "pkg_build/root/Applications/$CHINESE_APP_NAME/Contents/MacOS/cache/"

# 创建完善的安装后脚本
echo -e "${YELLOW}📝 创建安装后脚本...${NC}"
cat > pkg_build/scripts/postinstall << 'EOF'
#!/bin/bash

# 设置日志文件路径
LOG_FILE="/tmp/limereader_install.log"
exec > "$LOG_FILE" 2>&1

echo "=== 影谷长图处理大师 安装日志 ==="
echo "安装时间: $(date)"
echo "脚本开始执行..."

# 设置变量
APP="/Applications/影谷长图处理大师.app"
echo "目标路径: $APP"

# 检查安装状态
if [ -d "$APP" ]; then
    echo "✅ 应用文件已复制到目标位置"

    # 获取当前用户
    CURRENT_USER=$(id -un)
    echo "当前用户: $CURRENT_USER"

    # 显示应用结构
    echo "应用目录结构:"
    ls -la "$APP/" | head -5
    echo "MacOS目录内容:"
    ls -la "$APP/Contents/MacOS/" | head -5

    # 检查可执行文件
    EXECUTABLE="$APP/Contents/MacOS/LimeReader"
    if [ -f "$EXECUTABLE" ]; then
        echo "✅ 可执行文件存在: $EXECUTABLE"

        # 修复权限
        echo "修复可执行文件权限..."
        chmod +x "$EXECUTABLE"

        # 验证权限修复
        if [ -x "$EXECUTABLE" ]; then
            echo "✅ 可执行文件权限修复成功"
        else
            echo "❌ 可执行文件权限修复失败"
        fi
    else
        echo "❌ 可执行文件不存在: $EXECUTABLE"
        echo "MacOS目录内容:"
        ls -la "$APP/Contents/MacOS/" || echo "无法访问MacOS目录"
    fi

    # 修复目录权限（如果需要）
    echo "修复目录权限..."
    chown -R "$CURRENT_USER:staff" "$APP" 2>/dev/null || echo "权限修复跳过（可能不需要）"
    chmod -R 755 "$APP" 2>/dev/null || echo "目录权限修复跳过（可能不需要）"

    # 最终验证
    echo "=== 最终验证 ==="
    if [ -f "$APP/Contents/MacOS/LimeReader" ] && [ -x "$APP/Contents/MacOS/LimeReader" ]; then
        echo "✅ 应用安装验证成功"
        echo "应用路径: $APP"
        echo "用户: $(ls -ld "$APP" | awk '{print $3}')"
        echo "权限: $(ls -la "$APP/Contents/MacOS/LimeReader" | awk '{print $1}')"

        # 关键步骤：向Launch Services注册应用
        echo "注册应用到系统..."
        if command -v /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Versions/Current/Support/lsregister >/dev/null 2>&1; then
            /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Versions/Current/Support/lsregister -f -v "$APP" 2>/dev/null || echo "应用注册跳过"
        fi

        # 强制更新Finder和系统数据库
        if command -v osascript >/dev/null 2>&1; then
            osascript -e 'tell application "Finder" to update every window' 2>/dev/null || true
        fi

        # 重建Spotlight索引（可选，但有助于快速搜索）
        if command -v mdimport >/dev/null 2>&1; then
            mdimport "$APP" 2>/dev/null || echo "Spotlight索引跳过"
        fi

        echo "✅ 影谷长图处理大师 安装完成！"
        echo "应用已成功注册到系统，现在可以从以下位置启动："
        echo "  • Launchpad（立即可见）"
        echo "  • Applications 文件夹"
        echo "  • Spotlight 搜索 '影谷长图处理大师'"
    else
        echo "❌ 应用安装验证失败"
        echo "请检查应用是否正确复制"
    fi

else
    echo "❌ 应用文件未找到: $APP"
    echo "请检查PKG安装过程"
    echo "Applications目录内容:"
    ls -la "/Applications/" | grep -i lime || echo "未找到LimeReader相关文件"
fi

echo "=== 安装日志结束 ==="
exit 0
EOF

# 设置脚本权限
chmod +x pkg_build/scripts/postinstall

# 验证postinstall脚本
echo -e "${YELLOW}✅ 验证安装后脚本...${NC}"
if [ -x "pkg_build/scripts/postinstall" ]; then
    echo -e "${GREEN}✅ 安装后脚本创建成功${NC}"
else
    echo -e "${RED}❌ 安装后脚本创建失败${NC}"
    exit 1
fi

# 创建改进的PKG构建脚本
echo -e "${YELLOW}🏗️  构建PKG包...${NC}"

# 创建更详细的Distribution.xml
cat > pkg_build/Distribution.xml << EOF
<?xml version="1.0" encoding="utf-8"?>
<installer-gui-script minSpecVersion="1">
    <title>影谷长图处理大师 ${VERSION}</title>
    <options customize="never" allow-external-scripts="false"/>
    <domains enable_anywhere="false" enable_currentUserHome="false" enable_localSystem="true"/>
    <root-volume-only/>
    <choices-outline>
        <line choice="default">
            <line choice="limereader"/>
        </line>
    </choices-outline>
    <choice id="default" visible="false" selected="true"/>
    <choice id="limereader" visible="true" title="影谷长图处理大师" description="安装影谷长图处理大师到Applications文件夹">
        <pkg-ref id="com.limereader.app"/>
    </choice>
    <pkg-ref id="com.limereader.app" version="${VERSION}" auth="root">temp_component.pkg</pkg-ref>
</installer-gui-script>
EOF

# 使用pkgbuild构建PKG
echo "使用pkgbuild构建PKG..."
pkgbuild \
    --root pkg_build/root \
    --scripts pkg_build/scripts \
    --identifier com.limereader.app \
    --version $VERSION \
    --install-location "/" \
    temp_component.pkg

# 然后使用productbuild创建最终的分发包
if command -v productbuild >/dev/null 2>&1; then
    echo "使用productbuild创建分发包..."
    productbuild \
        --distribution pkg_build/Distribution.xml \
        --package-path temp_component.pkg \
        --resources pkg_build \
        "$DIST_DIR/$PKG_NAME"

    # 清理临时文件
    rm -f temp_component.pkg
else
    echo "productbuild不可用，直接使用pkgbuild结果..."
    mv temp_component.pkg "$DIST_DIR/$PKG_NAME"
fi

# 清理临时文件
rm -rf pkg_build temp_extracted_pkg

# 验证结果
echo -e "${YELLOW}🔍 验证构建结果...${NC}"
if [ -f "$DIST_DIR/$PKG_NAME" ]; then
    size=$(du -h "$DIST_DIR/$PKG_NAME" | cut -f1)
    echo -e "${GREEN}✅ PKG构建成功！${NC}"
    echo -e "${GREEN}📦 文件: $DIST_DIR/$PKG_NAME${NC}"
    echo -e "${GREEN}📊 大小: $size${NC}"

    # 验证PKG内容
    echo -e "${YELLOW}🔍 验证PKG内容...${NC}"
    pkgutil --expand "$DIST_DIR/$PKG_NAME" temp_verify >/dev/null 2>&1
    if [ -d "temp_verify" ]; then
        # 查找应用包（可能在不同的位置）
        FOUND_APP=0
        if [ -d "temp_verify/Applications/$CHINESE_APP_NAME" ]; then
            echo -e "${GREEN}✅ 应用包路径正确${NC}"
            FOUND_APP=1
        else
            # 检查pkg内容找到应用
            find temp_verify -name "*.pkg" -type f | while read pkg; do
                echo "检查包: $pkg"
                pkgutil --expand "$pkg" temp_pkg_check >/dev/null 2>&1
                if [ -d "temp_pkg_check" ]; then
                    if find temp_pkg_check -name "$CHINESE_APP_NAME" -type d | head -1; then
                        echo -e "${GREEN}✅ 在子包中找到应用包${NC}"
                        FOUND_APP=1
                    fi
                    rm -rf temp_pkg_check
                fi
            done
        fi

        if [ $FOUND_APP -eq 0 ]; then
            echo -e "${YELLOW}⚠️  应用包验证跳过（可能存在于子包中）${NC}"
        fi

        # 检查安装脚本
        if [ -f "temp_verify/Scripts/postinstall" ] || find temp_verify -name "postinstall" -type f | head -1; then
            echo -e "${GREEN}✅ 安装后脚本存在${NC}"
        else
            echo -e "${YELLOW}⚠️  安装后脚本验证跳过（可能存在于子包中）${NC}"
        fi
        rm -rf temp_verify
    fi

    echo -e "${CYAN}🚀 安装命令:${NC}"
    echo -e "${YELLOW}  open $DIST_DIR/$PKG_NAME${NC}"

    echo -e "${CYAN}🧪 测试安装（可选）:${NC}"
    echo -e "${YELLOW}  sudo installer -pkg $DIST_DIR/$PKG_NAME -target /${NC}"

else
    echo -e "${RED}❌ PKG构建失败${NC}"
    exit 1
fi

echo
echo -e "${GREEN}🎉 可靠PKG构建完成！${NC}"
echo -e "${GREEN}现在可以分发给用户使用了！${NC}"

# 创建验证脚本
cat > "$DIST_DIR/test_installation.sh" << 'EOF'
#!/bin/bash

echo "测试PKG安装..."

# 安装PKG
sudo installer -pkg "$(dirname "$0")/LimeReader_v2.7.2_macOS.pkg" -target /

# 检查安装结果
echo "检查安装结果..."
if [ -d "/Applications/影谷长图处理大师.app" ]; then
    echo "✅ 安装成功！"
    echo "应用位置: /Applications/影谷长图处理大师.app"

    # 测试启动
    echo "测试启动..."
    open "/Applications/影谷长图处理大师.app"

    # 等待3秒后检查进程
    sleep 3
    if pgrep -f "影谷长图处理大师" > /dev/null; then
        echo "✅ 应用启动成功！"
    else
        echo "❌ 应用启动失败"
        echo "请检查安装日志: /tmp/limereader_install.log"
    fi
else
    echo "❌ 安装失败"
    echo "请检查 /tmp/limereader_install.log"
fi
EOF

chmod +x "$DIST_DIR/test_installation.sh"

echo -e "${CYAN}📋 测试脚本: $DIST_DIR/test_installation.sh${NC}"
echo -e "${GREEN}现在可以分发给用户，用户只需双击PKG文件即可完成安装！${NC}"